{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 卷积定理\n",
    "\n",
    "卷积定理表明：\n",
    "1. 空间卷积 $\\Leftrightarrow$ 频域相乘\n",
    "2. 空间相乘 $\\Leftrightarrow$ 频域卷积\n",
    "\n",
    "即\n",
    "\n",
    "$f(x, y) \\star h(x, y) \\Leftrightarrow F(u, v) H(u, v)$\n",
    "\n",
    "$f(x, y) h(x, y) \\Leftrightarrow F(u, v) \\star H(u, v)$\n",
    "\n",
    "当要进行频率域滤波的时候, 必须使用频域相乘. 由于傅里叶变换后\n",
    "的函数具有周期性, 因此需要进行zero padding, 才能保证傅里叶变\n",
    "换后的函数有足够的\"空间\"进行卷积而不会发生缠绕错误. \n",
    "\n",
    "如下所示: \n",
    "\n",
    "首先导入必要的包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy import fftpack\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "然后给两个函数, $a$ 和 $b$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f2020fcc7d0>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = np.append(np.ones(100), np.zeros(100))\n",
    "b = np.append(np.ones(150), np.zeros(50))\n",
    "fig, [ax1, ax2] = plt.subplots(1, 2)\n",
    "ax1.plot(a, label='Function a')\n",
    "ax1.legend()\n",
    "ax2.plot(b, label='Function b')\n",
    "ax2.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来让 $a$ 和 $b$ 在频域中相乘并画出结果反变换后的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 110)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a_fft = fftpack.fft(a)\n",
    "b_fft = fftpack.fft(b)\n",
    "plt.plot(np.around(np.abs(fftpack.ifft(a_fft * b_fft)), 8))\n",
    "plt.xlim(0, 400)\n",
    "plt.ylim(0, 110)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了验证卷积定理, 接下来画一个真实的 $a$ 和 $b$ 的卷积结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 110)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "acovb = []\n",
    "for i in np.arange(a.shape[0] + b.shape[0]): \n",
    "    if i <= a.shape[0]:\n",
    "        acovb.append(np.sum(a[:i] * np.flip(b[:i])))\n",
    "    elif i > a.shape[0]:\n",
    "        acovb.append(sum(a[i-b.shape[0]:] * np.flip(b[i-a.shape[0]:])))\n",
    "plt.plot(acovb)\n",
    "plt.xlim(0, 400)\n",
    "plt.ylim(0, 110)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图就是 $a$ 和 $b$ 卷积的结果, 可以看到形状与之前没有进行零填充就在频域中相乘的结果明显不同. \n",
    "这是因为傅里叶变换之后是周期的, 因此, 在空间中的卷积就是循环卷积, 即只在一个周期中卷积. 这是\n",
    "造成两图差异的主要原因. 因此接下来, 在进行傅里叶变换的时候需要对原函数进行零填充.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 110)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a_fft = fftpack.fft(a, 400)\n",
    "b_fft = fftpack.fft(b, 400)\n",
    "plt.plot(np.around(np.abs(fftpack.ifft(a_fft * b_fft)), 8))\n",
    "plt.xlim(0, 400)\n",
    "plt.ylim(0, 110)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "那么零填充至少到多大 $a$ 和 $b$ 卷积才不会互相缠绕呢? \n",
    "\n",
    "Brigham 在1988 年证明了, 需要将 0 填充至两个函数的长度相同, 并且长度要满足下式: \n",
    "\n",
    "$P \\geqslant A+B-1$\n",
    "\n",
    "其中: \n",
    "\n",
    "- $P$: 表示两个函数需要通过零填充到达的最短长度; \n",
    "- $A$: 表示 $a$ 函数的长度; \n",
    "- $B$: 表示 $b$ 函数的长度;\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
